// 目标：返回两个字符串切片中较长的一个
// TODO: 添加生命周期标注
fn longest_string<'a>(s1: &'a str, s2: &'a str) -> &'a str {
    if s1.len() > s2.len() {
        s1
    } else if s1.len() < s2.len() {
        s2
    } else {
        s1 // 当长度相同时返回第一个字符串
    }
}

#[test]
fn test_longest() {
    // 基本功能测试
    assert_eq!(longest_string("hello", "rustaceans"), "rustaceans");
    
    // 相同长度测试
    assert_eq!(longest_string("rust", "code"), "rust"); // 第一个相同长度返回第一个
    
    // 空字符串测试
    assert_eq!(longest_string("", "non-empty"), "non-empty");
}

// 添加使用示例
fn main() {
    let s1 = "Hello";
    let s2 = "Rustaceans";
    let result = longest_string(s1, s2);
    println!("The longest string is: {}", result);
    
    // 演示动态字符串的生命周期管理
    let s3 = String::from("Dynamic string");
    let result2 = longest_string(s3.as_str(), "Static literal");
    println!("Longest between dynamic and static: {}", result2);
}
